ระบบทะเบียนของ UniLearn และ LMS ไม่มีรหัสนักศึกษาเดียวกันทั้งหมด ทีมงานต้องการรายงานหลายฉบับ ซึ่งแต่ละฉบับมีคำตอบที่แตกต่างกันสำหรับคำถามที่ว่า “แถวจากแหล่งข้อมูลใดที่ต้องปรากฏในผลลัพธ์?”
ใช้ฐานข้อมูลจาก Lab 6 ซ้ำ
หากคุณรัน lab6_7_setup.sql ใน Lab 6 ไปแล้ว ให้ใช้ข้อมูลนั้นต่อไป หากยังไม่ได้รัน ให้เปิดไฟล์ตั้งค่าที่ใช้ร่วมกันซึ่งผู้สอนมอบให้ใน pgAdmin แล้วรันเพียงครั้งเดียว จากนั้นเลือก lab6_7 ในทุกการเชื่อมต่อ Query Tool ใหม่
เริ่มจาก Join ที่คุณคุ้นเคย
- ตรวจดูตาราง
studentsและlms_roster: มี 22 รหัสในระบบทะเบียน และ 6 รหัสใน LMS - รัน INNER JOIN ตามกฎการจับคู่จาก Lab 6
- ระบุรหัสทั้ง 4 รายการที่มีอยู่ในทั้งสองแหล่งข้อมูล
- อธิบายว่าเหตุใดผลลัพธ์นี้จึงไม่สามารถเป็นรายการที่ครบถ้วนจากแหล่งข้อมูลใดแหล่งหนึ่งได้
คำขอรายงาน 5 รายการ
แสดงบัญชีที่ใช้ร่วมกัน เก็บนักศึกษาทุกคนในระบบทะเบียน เก็บบัญชี LMS ทุกรายการ กระทบยอดทั้งสองแหล่งข้อมูล และสร้างตัวเลือกนักศึกษา–รายวิชา คุณจะเขียนคิวรี INNER, LEFT, RIGHT, FULL และ CROSS JOIN สำหรับคำขอเหล่านี้
SET search_path TO lab6_7;
SELECT s.student_id AS registry_id, s.student_name,
r.student_id AS lms_id, r.lms_name
FROM students AS s
INNER JOIN lms_roster AS r
ON s.student_id = r.student_id
ORDER BY s.student_id;ตรวจสอบรหัสที่จับคู่ได้
มี 4 แถว ได้แก่ S101, S102, S105 และ S121 โดยแต่ละรหัสไม่ซ้ำกันในทั้งสองตาราง จึงทำให้คู่ที่จับคู่ได้แต่ละคู่ปรากฏเพียงครั้งเดียว รายงานนี้แสดงเฉพาะบัญชีที่ใช้ร่วมกัน
Uma (S121) มีบัญชี LMS แม้จะไม่ได้ลงทะเบียนเรียนรายวิชาใดเลย การที่บัญชีจับคู่กันได้ไม่ได้ยืนยันว่ามีการเข้าร่วมรายวิชา
ตรวจดูแหล่งข้อมูลทั้งสอง
รายชื่อใน LMS เป็นข้อมูลนำเข้าที่ยังไม่ผ่านการตรวจสอบ โดยตั้งใจไม่มี foreign key อ้างอิงไปยังตาราง students ดังนั้น S901 และ S902 จึงมีอยู่เฉพาะในแหล่งข้อมูลนี้เท่านั้น
SET search_path TO lab6_7;
SELECT student_id, student_name
FROM students
ORDER BY student_id;
SELECT student_id, lms_name
FROM lms_roster
ORDER BY student_id;| รหัส LMS | ชื่อใน LMS | อยู่ในระบบทะเบียน? |
|---|---|---|
| S101 | Alice Wong | ใช่ |
| S102 | Ben Lau | ใช่ |
| S105 | Emma Li | ใช่ |
| S121 | Uma Shah | ใช่ |
| S901 | ผู้เยี่ยมชมที่นำเข้า A | ไม่ใช่ |
| S902 | ผู้เยี่ยมชมที่นำเข้า B | ไม่ใช่ |
ไฟล์ตั้งค่าที่ใช้ร่วมกันยังมีข้อมูลรายวิชา 8 รายวิชา การลงทะเบียนเรียน 37 รายการ งานมอบหมาย 8 ชิ้น และงานที่ส่ง 30 ชิ้น สำหรับใช้ในงานถัดไป ข้อมูลทั้งหมดเป็นข้อมูลสมมติ
อ่านคำขอก่อนเลือกใช้ Join
| คำขอ | ผลลัพธ์ที่ต้องการ |
|---|---|
| บัญชีที่ใช้ร่วมกัน | เฉพาะคู่รหัสที่จับคู่กันได้เท่านั้น |
| ความครอบคลุมของระบบทะเบียน | นักศึกษาทุกคนในระบบทะเบียน แม้จะไม่มีบัญชี LMS |
| การตรวจสอบข้อมูลนำเข้า LMS | บัญชี LMS ที่นำเข้าทุกรายการ แม้จะไม่ตรงกับข้อมูลในระบบทะเบียน |
| กระทบยอดทั้งสองระบบ | บัญชีที่ใช้ร่วมกันและข้อมูลที่พบในแหล่งข้อมูลใดแหล่งหนึ่งเพียงอย่างเดียว |
| การวางแผนรายวิชา | นักศึกษาที่เลือกทุกคนจับคู่กับรายวิชาที่เลือกทุกรายวิชา |
Lab 6 ได้อธิบายว่าคู่ที่จับคู่กันกลายเป็นแถวได้อย่างไร ใน Lab นี้ คุณจะเปลี่ยนประเภทของ join เพื่อควบคุมแถวที่ไม่จับคู่หรือสร้างผลรวมทุกรูปแบบ จากนั้นตรวจดูว่าแต่ละแถวในผลลัพธ์หมายถึงอะไร